<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  // 数组可以存储多个相同类型的数据  => 对数据的描述不够详细
  // var list = [
  //     ["张三", 55, 66, 77], 
  //     ["李四", 67, 89, 90], 
  //     ["王五", 96, 50, 87],
  // ];
  var list = ["a", "b", "c"];
  // console.log(list);
  // console.log(list.length);
  // console.log(list[4]);
  // list[0] = 1;

  // 对象: 对一个或一类事物特征和行为的描述

  // 对象是以键值对(key:value)形式存在的,可以没有也可以有多个,逗号分隔
  // key=>键名/属性名(字符串类型可以省略引号"") value:键值/属性值(任意类型)

  // 对象的特性:
  // 1. 通过键名取值和赋值  
  //    a. 点语法          对象.键名      一般用于快捷取值
  //    b. 中括号语法      对象["键名"]   一般配合变量/字符串使用(封装函数,遍历对象使用)

  // 对象取值时,如果取一个不存在的键名/属性名 => 默认返回undefined
  // 对象赋值时,如果对一个不存在的键名/属性名赋值  => 则新增键名,键值到该对象中

  // 2. 可以被for...in循环遍历



  // var zhangSan = {
  //     // key:value,    key=>键名/属性名(字符串类型可以省略引号"") value:键值/属性值(任意类型)
  //     "name":"张三",
  //     "age":25,
  //     "isStudy":true,
  //     "money":null,
  //     "grade":[55,66,77],
  //     "say":function(){ //匿名函数
  //         console.log("hello");
  //     }
  // }

  var zhangSan = {
    // key:value,    key=>键名/属性名(字符串类型可以省略引号"") value:键值/属性值(任意类型)
    name: "张三", // 属性(键值存储的是值类型)
    age: 25,
    isStudy: true,
    money: 10000,
    grade: [55, 66, 77],
    say: function () { //匿名函数  方法(键值存储的是函数)
      console.log("hello");
    }
  }
  console.log(zhangSan);

  // 点语法
  // 取值
  // console.log(zhangSan.name);
  // console.log(zhangSan.age);
  // console.log(zhangSan.money);
  // console.log(zhangSan.grade);
  // console.log(zhangSan.say); // 取出函数
  // zhangSan.say(); //取值 调用

  // console.log(zhangSan.say()); // 调用函数 返回执行的结果  先打印hello 再打印undefined

  // 对象取值时,如果取一个不存在的键名/属性名 => 默认返回undefined
  // console.log(zhangSan.hobby);   

  // 赋值
  // zhangSan.name = "李四";
  // zhangSan.age = 28;
  // zhangSan.money = 20000;
  // console.log(zhangSan);

  // 对象赋值时,如果对一个不存在的键名/属性名赋值  => 则新增键名,键值到该对象中
  // zhangSan.hobby = ["唱歌","跳舞","玩游戏"];
  // console.log(zhangSan);


  // 中括号语法

  // 取值
  // console.log(zhangSan["name"]);
  // console.log(zhangSan["age"]);
  // console.log(zhangSan["money"]);
  // console.log(zhangSan["grade"]);
  // console.log(zhangSan["say"]);

  // zhangSan["say"](); // zhangSan.say();

  // 赋值
  // zhangSan["name"] = "李四"
  // zhangSan["age"] = 30;
  // zhangSan["money"] = 30000;
  // console.log(zhangSan);


  // 2. 可以被for...in循环遍历
  // for(var key in zhangSan){   //遍历对象返回对象的键名(字符串)
  //     // key 变量(字符串)  "name" "age"  "isStudy"
  //     console.log(key,zhangSan[key]);  // zhangSan["name"]
  // }







</script>

<script>
  var zhouchongbo = {
    name: '周冲波',
    age: 25,
    money: 0,
    grade: [50, 60, 70, 80],
    say: function () {  //匿名函数  方法（键值储存打的是函数）
      console.log('你好，我是喜马拉雅周冲波！');
    }
  }
  console.log(zhouchongbo);

  //点语法

  //取值
  console.log(zhouchongbo.name);
  console.log(zhouchongbo.say); //取出函数
  zhouchongbo.say(); //取值  调用

  console.log(zhouchongbo.say());

  // 赋值
  zhouchongbo.name = '喜马拉雅';
  zhouchongbo.age = 80;
  zhouchongbo.money = -20000;
  console.log(zhouchongbo);
</script>

</html>